package com.jgp.serviceverificationcode.service.impl;

import com.jgp.internalcommon.dto.ResponseResult;
import com.jgp.internalcommon.dto.serviceverifycationcode.VerifyCodeResponse;
import com.jgp.serviceverificationcode.service.VerifyCodeService;
import org.springframework.stereotype.Service;

@Service
public class VerifyCodeServiceImpl implements VerifyCodeService {
    @Override
    public ResponseResult<VerifyCodeResponse> generate(int identity, String phoneNumber) {
        // 校验 三档验证，乌云 安全检测。业务方控制，不能无限制发短信
        // 存到redis 1分钟发了三次 5分钟不让发，一小时发了10次，24小时不让发
        String code = String.valueOf((int)(Math.random()*900000+100000));
        VerifyCodeResponse data = new VerifyCodeResponse(code);
        return ResponseResult.success(data);
    }

    /**
     * 用户传入验证码和redis中验证码一直校验通过，否则不过
     * @param identity
     * @param phoneNumber
     * @param code
     * @return
     */
    public ResponseResult verify(int identity,String phoneNumber,String code){

        VerifyCodeResponse data = new VerifyCodeResponse(code);
        return ResponseResult.success(data);
    }

    public static void main(String[] args) {

        long start = System.currentTimeMillis();

        for (int i = 0; i < 1000000; i++) {
//            String code = String.valueOf(Math.random()*899999+100000);
            String code = (Math.random()+"").substring(2,8);
            if (code.length()!=6){
                System.out.println(code);
            }
        }
        long end1 = System.currentTimeMillis();
        System.out.println("-------1---------------");
        System.out.println(end1-start);

        for (int i = 0; i < 1000000; i++) {
            String code = String.valueOf((int)((Math.random()*9+1)*Math.pow(10,5)));

            if (code.length()!=6){
                System.out.println(code);
            }
        }
        long end2 = System.currentTimeMillis();
        System.out.println("--------2---------------");
        System.out.println(end2-end1);
        for (int i = 0; i < 1000000; i++) {
            String code = String.valueOf((int)(Math.random()*900000+100000));

            if (code.length()!=6){
                System.out.println(code);
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("--------3---------------");
        System.out.println(end-end2);

    }
    /**
     * 线程数的估算：
     * 8核16线程。
     * 线程数=cpu可用核数/1-阻塞系数（io密集型接近1，计算密集接近0）
     * 计算密集的线程可以按照核数+1
     * io密集型可以多一些大概10倍
     * 具体数量需要实际根据压测
     *
     * 提升QPS
     * 提高并发数
     * 减少响应时间
     */
}
